﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Libreria.DAL;
using System.ComponentModel.DataAnnotations;

namespace Libreria.SICOM.Modelo
{
     [CAD(true, CAD.TiposBD._SQLServer)]
    public class Muestra
    {
         public MOR accesoADatos;
         private String identificador;
         private Int32? idtipodemuestra;
         private Int32? iddeproyecto;
         private Int32? iddelugar;
         private DateTime fechadecaptura;
         private Int32? codigoderesponsable;
         private String mac;
         private Int32? iddeequipo;
         private Int32? iddevariable;
         private String valor;

            public Muestra()
         {

         }
            public Muestra(String CadenaDeConexion)
         {
             this.accesoADatos = MOR.Instance(CadenaDeConexion);
         }


         [Tipo(Tipo.TiposSQLServer._varchar, "MUES_ID", true, false)]
         
         public String Identificador
         {
             get { return identificador; }
             set { identificador = value; }
         }

          [Tipo(Tipo.TiposSQLServer._int, "TIPOM_ID")]
         [Required(ErrorMessage = " *** Campo Tipo de Muestra obligatorio***")]
         public Int32? Idtipodemuestra
         {
             get { return idtipodemuestra; }
             set { idtipodemuestra = value; }
         }

         [Tipo(Tipo.TiposSQLServer._int, "PROY_ID")]
         [Required(ErrorMessage = " *** Campo Proyecto obligatorio***")]
         public Int32? Iddeproyecto
         {
             get { return iddeproyecto; }
             set { iddeproyecto = value; }
         }

         [Tipo(Tipo.TiposSQLServer._int, "LUG_ID")]
         [Required(ErrorMessage = " *** Campo Lugar obligatorio***")]
         public Int32? Iddelugar
         {
             get { return iddelugar; }
             set { iddelugar = value; }
         }

          [Tipo(Tipo.TiposSQLServer._datetime, "MUES_FECHA")]
          [Required(ErrorMessage = " *** Campo Fecha de Toma  obligatorio***")]
         public DateTime Fechadecaptura
         {
             get { return fechadecaptura; }
             set { fechadecaptura = value; }
         }

          [Tipo(Tipo.TiposSQLServer._int, "MUES_RESPONSABLE")]
         public Int32? Codigoderesponsable
          {
              get { return codigoderesponsable; }
              set { codigoderesponsable = value; }
          }
         [Tipo(Tipo.TiposSQLServer._varchar, "MUES_MAC")]
         public String Mac
         {
             get { return mac; }
             set { mac = value; }
         }

          [Tipo(Tipo.TiposSQLServer._int,"EQUI_ID")]
          [Required(ErrorMessage = " *** Campo Equipo de mdicion obligatorio***")]
          public Int32? Iddeequipo
         {
             get { return iddeequipo; }
             set { iddeequipo = value; }
         }

          [Tipo(Tipo.TiposSQLServer._int, "VAR_ID")]
          [Required(ErrorMessage = " *** Campo Variable obligatorio***")]
         public Int32? Iddevariable
         {
             get { return iddevariable; }
             set { iddevariable = value; }
         }

          [Tipo(Tipo.TiposSQLServer._varchar, "MUES_VALOR")]
          [Required(ErrorMessage = " *** Campo Valor obligatorio***")]
         public String Valor
         {
             get { return valor; }
             set { valor = value; }
         }



         // Métodos de abstracción de datos
          public void crear()
          {
              this.accesoADatos.crearRegistro(this);
          }

          public List<Muestra> consultar()
          {
              return consultar(0, false);
          }
          
          public List<Muestra> consultar(int numeroRegistros, bool descendente)
          {
              List<Object> registros = this.accesoADatos.consultarRegistros(this, false, numeroRegistros, descendente);
              List<Muestra> resultado = new List<Muestra>();
              foreach (Object registro in registros)
              {
                  resultado.Add((Muestra)registro);
              }
              return resultado;
          }

          public Muestra consultarPorIdentificador(String identificador)
          {
              this.identificador = identificador;
              List<Object> registros = this.accesoADatos.consultarRegistros(this, true);
              Muestra resultado = null;
              if (registros != null)
              {
                  if (registros.Count == 1)
                  {
                      resultado = (Muestra)registros[0];
                  }
              }
              return resultado;
          }

          public void actualizar()
          {
              this.accesoADatos.actualizarRegistro(this);
          }

          public void eliminar()
          {
              this.accesoADatos.borrarRegistro(this);
          }
    }
}
